# coding:utf8
import logging

def setup_logger(logger_name, log_file,level=logging.INFO,add_console_handler=False):
    """
       创建并配置一个日志记录器。

       :param logger_name: 日志记录器的名称，建议按照项目统一的命名规则进行命名，方便管理和查找对应的日志记录器。
       :param log_file: 日志文件的路径，应为合法的文件系统路径，确保程序对该路径有写入权限。
       :param level: 日志记录级别，可选值为 logging 模块中定义的各个级别（如 logging.DEBUG、logging.INFO、logging.WARNING、logging.ERROR、logging.CRITICAL ），默认值为 logging.INFO。
       :param formatter: 日志格式字符串，可根据具体需求自定义格式，默认格式为 '%(asctime)s - %(name)s - %(levelname)s - %(message)s'。
       :return: 配置好的日志记录器对象，可用于后续在程序中记录相应级别的日志信息。
       """
    logger = logging.getLogger(logger_name)
    logger.setLevel(level)#记录日志级别
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')#创建日志格式
    try:
        file_handler = logging.FileHandler(log_file)#添加文件地址
        file_handler.setFormatter(formatter)#添加日志格式
        logger.addHandler(file_handler)#添加到日志记录器对象中
        if add_console_handler:#日志输出控制台操作
            console_handler = logging.StreamHandler()
            console_handler.setFormatter(formatter)
            logger.addHandler(console_handler)
    except IOError as e:
        print(f'创建日志文件处理器时出错：{e}')
    except Exception as ex:
        print(f'创建日志文件处理器时出线其他未知错误：{ex}')

    return logger